using System;
using ActivUFRJ.Classes.Busca;

namespace ActivUFRJ.Classes.Busca
{
    public class DBBuscarComunidades : Connection.MySQL
    {
        public DBBuscarComunidades() : base(ref Connection.DBConnection.myConnection)
        {

        }

        internal ResultadoBusca GetResultadoBusca(ParametrosComunidade pc)
        {

            try
            {

                ResultadoBusca resultadoBusca = new ResultadoBusca();

                string SQL = "SELECT comunidades.COM_ID, COM_nome, COM_descricao, COM_DATA_REGISTRO, ai_descricao, usr_id, Concat(USR_Nome, ' ', USR_Sobrenome) as NomeCompleto " +
                                "from comunidades " +
                                "inner join areas_de_interesse on comunidades.ai_id = areas_de_interesse.ai_id " +
                                "inner join usuarios on comunidades.usr_id_autor = usuarios.usr_id " +
                                "where 1 = 1";

                if (pc.IdCategoria > 0) SQL += " AND comunidades.AI_ID = " + pc.IdCategoria.ToString();
                if (pc.IdFormato > 0)
                {
                    // esta consulta se torna um pouco mais complicada pois preciso olhar a tabela
                    // de artefatos e procurar se algum artefato com o formato especificado (AF_ID)
                    // consta naquela comunidade
                    SQL += " and com_id in " +
                                "( " +
                                    "select artefatos.af_id from artefatos " +
                                    "where af_id = " + pc.IdFormato.ToString() +
                                ") ";
                }

                if (pc.Nome != "") SQL += " AND comunidades.COM_Nome like '%" + pc.Nome.Replace("'", "''") + "%' OR comunidades.COM_Descricao like '%" + pc.Nome.Replace("'", "''") + "%'";

                if ((pc.ParametroDataCriacao != ParametroData.Qualquer) && (pc.ParametroDataCriacao != null))
                {
                    switch (pc.ParametroDataCriacao)
                    {
                        case ParametroData.DiferenteDe:
                            SQL += " AND comunidades.COM_DATA_REGISTRO <> '" + pc.DataAtualizacao.ToString("s") + "'";
                            break;
                        case ParametroData.IgualA:
                            SQL += " AND comunidades.COM_DATA_REGISTRO = '" + pc.DataAtualizacao.ToString("s") + "'";
                            break;
                        case ParametroData.MaiorQ:
                            SQL += " AND comunidades.COM_DATA_REGISTRO > '" + pc.DataAtualizacao.ToString("s") + "'";
                            break;
                        case ParametroData.MenorQ:
                            SQL += " AND comunidades.COM_DATA_REGISTRO < '" + pc.DataAtualizacao.ToString("s") + "'";
                            break;
                    }
                }

                System.DateTime inicioBusca = System.DateTime.Now;
                this.SetSQL(SQL);

                // 1. Tempo de busca
                System.TimeSpan tempoTotal = System.DateTime.Now.Subtract(inicioBusca);
                resultadoBusca.TempoDeBusca = Convert.ToDouble(tempoTotal.Milliseconds) / 1000;

                // 2. Pegar os valores da consulta
                resultadoBusca.ResultadoDT = this.ReturnTable();
                
                // 3. # de linhas afetadas
                resultadoBusca.NumeroRegistros = this.GetRowCount();

                return resultadoBusca;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}
